跳到主要内容

JZ1 二维数组中的查找

链接:https://www.nowcoder.com/practice/abc3fe2ce8e146608e868a70efebf62e

解答一

矩阵是有序的,从左下角来看,向上数字递减,向右数字递增,因此从左下角开始查找,当要查找数字比左下角数字大时。右移,要查找数字比左下角数字小时,上移

public class Solution {
public boolean Find(int target, int [][] array) {

int rows = array.length;
if (rows == 0) return false;
int cols = array[0].length;
if (cols == 0) return false;

int row = rows - 1;
int col = 0;

while(row > -1 && col < rows) {
// 如果比 targe 大则右移一位
if(target > array[row][col]) {
col++;
}
// 如果比 targe 小则上移一位
else if(target < array[row][col]){
row--;
}
// 相等
else {
return true;
}
}

return false;
}
}

go 的解法

func Find( target int ,  array [][]int ) bool {
n, m := len(array), len(array[0])
if n == 0 || m == 0 {
return false
}
n, m = n - 1, 0
for n > -1 && m < len(array[0]) {
if target > array[n][m] {
m++
} else if target < array[n][m] {
n--
} else {
return true
}
}
return false
}

23-5-23

暴力解法,直接遍历

func Find(target int, array [][]int) bool {
for i := 0; i < len(array); i++ {
for j := 0; j < len(array[i]); j++ {
if array[i][j] == target {
return true
}
}
}
return false
}